package Dominio;

import java.util.ArrayList;

interface InterfazFachadaDom {
	
	/*
	 * Registro de Usuarios:
	 * 		createCliente: Crea un cliente en el sistema.
	 * 		createTrabajador: Crea un trabajador en el sistema.
	 */

	public void createCliente(PerfilData cliente)
			throws DominioException;

	public void createTrabajador(PerfilData trabajador)
			throws DominioException;
	
	/************************************************************************/

	/*
	 * Login del Sistema: 
	 * Consultar perfil de usuario: 
	 * 		loginUser(): Identifica en el sistema a cualquier usuario.
	 */
	public PerfilData loginUser(String nif, String pass)
			throws DominioException;

	/**********************************************************************/

	/*
	 * Modificar perfil de usuario: updateCliente: Actualiza un cliente.
	 * updateTrabajador: Actualiza un Trabajador.
	 */
	
	public void updateUser(PerfilData user) throws DominioException;
	
	//public void updateCliente(PerfilData user) throws DominioException;
	//public void updateTrabajador(PerfilData trabajador) throws DominioException;

	/**************************************************************************/

	public void deleteUser(PerfilData user) throws DominioException;
	
	//public void deleteCliente(PerfilData user) throws DominioException;
	//public void deleteTrabajador(PerfilData trabajador) throws DominioException;

	/*
	 * Gestion de Apuestas:
	 * 		apostar: Permite a un usuario apostar.
	 * 		createApuesta: Crea una apuesta por parter de gestor de apuestas.
	 * 		readApuesta: Recupera apuestas del sistema.
	 * 		updateApuesta: Actualiza una apuesta.
	 * 		deleteApuesta: Elimina una apuesta del sistema.
	 */
	public void apostar(ApuestaUsuarioData apuesta) throws DominioException;

	public void createApuesta(ApuestaData apuesta) throws DominioException;
	
	public ArrayList<ApuestaData> readApuesta(int id) throws DominioException;

	public void updateApuesta(ApuestaData apuesta) throws DominioException;

	public void deleteApuesta(ApuestaData apuesta) throws DominioException;
	
	/****************************************************************************/

	/*
	 * Gestionar saldo: addSaldo: Agrega saldo a la cuenta de un cliente.
	 * exchangeSaldo: Retira saldo de la cuenta de un cliente.
	 */
	public void addSaldo(PerfilData cliente, float cantidad) throws DominioException;
	
	public void pagoApuestas(ApuestaData apuesta, char resultado) throws DominioException;

	public void exchangeSaldo(PerfilData cliente, float cantidad) throws DominioException;
	/****************************************************************/
}
